Computer programming languages have historically provided great flexibility in implementing desired computer functions at the expense of ease of use. For example, in the past, programmers were required to possess intimate knowledge of specific computer language command syntax and language architecture. Recently, much effort has been directed toward improving the ease of programming with a variety of techniques including the use of windows and pull-down, pop-up and tear-off menus. While the use of menu items significantly reduces the litany of computer system details programmers must maintain, the flexibility of a programming environment is often simultaneously reduced. Typically, a computer user interface is configured by its creators and is not readily modified by users. Usually, a user interface is configured to provide functions required by most users. However, for most applications, many desirable functions are not available through menus. No technique is known which allows the ease of using a plurality of menus in a programming environment while also providing the ability for users to customize available menus for individual requirements.
Furthermore, programming languages are usually limited to a set of features and commands which define a programming environment. No technique is known which allows the features of virtually any utility program or programming language to be combined in a single programming environment. For example, in the context of application programs, many word processing programs provide more sophisticated text editing capabilities than are available in a programming environment. In the past, if a programmer required the text editing capabilities of a word processing program, the user was required to quit the programming environment, load the word processing program, perform the desired text editing, quit the word processing program and reload the programming environment. No technique is known which allows a user to invoke, through a menu structure, an arbitrary command or program while automatically passing predefined arguments and returning directly to the programming environment once the desired task is completed.